(*
  Tidecom / (c) Copyright 2024
  -----------------------------------------------------------------------------------------
  Title: 电机顺序启停控制
  Comment: 30路电机自动延时启动停止控制逻辑
  Library: Tidecom_Library
  Author: Lei Liu, lei@Tidecom.cn
  Target System: Tidecom_Library
  Egineering: TIA Portal V17.0 SP2
  Restrictions: (OB types, etc.)
  Requirements: (S7 1500, etc.)
  -----------------------------------------------------------------------------------------
  Change log table:
  Version | Date | Signature | Expert in charge | Changes applied
  -----------------------------------------------------------------------------------------
  1.0.0 | 2024-12-30 | R2D2 | Lei Liu | First released version
  -----------------------------------------------------------------------------------------
 *)

(*
  Mode: 1: 自动模式, 2: 手动模式
  Status: 1000: 延时启动中, 2000: 延时停止中, 1001: 延时启动完成, 2001: 延时停止完成， 0: 未执行
  ------------------------------------------------------------------------------------------------
  Bnt_run: 启动按钮信号
  Num_run: 需要启动的电机数量
  Out_run: 控制输出的电机编号
  intime_run: TON计时器输入端控制信号
  Step_run: 步骤控制
  Run_busy: 是否正在执行延时启动操作
  TON_run: 延时定时器数组
  ------------------------------------------------------------------------------------------------
  Bnt_stop: 停止按钮信号
  Num_stop: 需要停止的电机数量
  Out_stop: 控制输出的电机编号
  Intime_stop: TON计时器输入端控制信号
  Step_stop: 步骤控制
  Stop_busy: 是否正在执行延时停止操作
  TON_stop: 延时定时器数组

 *)
// Manual Mode
IF #Estop AND #Mode = 2 THEN
  #Step_run := 0;
  #Intime_run := 0;
  #Run_busy := FALSE;
  #Out_run := 0;
  #Step_stop := 0;
  #Intime_stop := 0;
  #Stop_busy := FALSE;
  #Out_stop := 0;
END_IF;
// Run TON Timer Control
#"TON_run"[0](IN := #Intime_run.%X0, PT := #PRE_TIME);
#"TON_run"[1](IN := #Intime_run.%X1, PT := #Run_time, ET=>#ET_run);
// Run Sequence Control
IF #Estop THEN
  IF #Mode = 1 AND #Bnt_run AND NOT #Run_busy THEN
    #Step_stop := 0;
    #Intime_stop := 0;
    #Stop_busy := FALSE;
    #Out_stop := 0;
    #Intime_run := 0;
    #Intime_run.%X0 := TRUE;
    #Out_run := 0;
  END_IF;
  IF #Intime_run.%X0 AND #TON_run[0].Q THEN
    #Run_busy := TRUE;
    #Step_run := 1;
    #Status := 1000;
    #Intime_run.%X0 := FALSE;
  END_IF;
ELSE
  #Step_run := 0;
  #Intime_run := 0;
  #Run_busy := FALSE;
  #Out_run := 0;
  #Mode := 0;
  #Status := 0;
END_IF;
IF #Mode = 1 AND #Run_busy THEN
  // STEP 1
  IF #Step_run = 1 THEN
    IF #Num_run >= 1 THEN
      #Out_run.%X1 := TRUE; // MOTOR 1
      #Step_run := 2;
      RETURN;
    END_IF;
    IF NOT (#Num_run >= 1) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 2
  IF #Step_run = 2 THEN
    IF #Num_run >= 2 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X2 := TRUE; // MOTOR 2
        #Intime_run.%X1 := FALSE;
        #Step_run := 3;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 2) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 3
  IF #Step_run = 3 THEN
    IF #Num_run >= 3 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X3 := TRUE; // MOTOR 3
        #Intime_run.%X1 := FALSE;
        #Step_run := 4;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 3) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 4
  IF #Step_run = 4 THEN
    IF #Num_run >= 4 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X4 := TRUE; // MOTOR 4
        #Intime_run.%X1 := FALSE;
        #Step_run := 5;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 4) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 5
  IF #Step_run = 5 THEN
    IF #Num_run >= 5 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X5 := TRUE; // MOTOR 5
        #Intime_run.%X1 := FALSE;
        #Step_run := 6;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 5) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 6
  IF #Step_run = 6 THEN
    IF #Num_run >= 6 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X6 := TRUE; // MOTOR 6
        #Intime_run.%X1 := FALSE;
        #Step_run := 7;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 6) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 7
  IF #Step_run = 7 THEN
    IF #Num_run >= 7 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X7 := TRUE; // MOTOR 7
        #Intime_run.%X1 := FALSE;
        #Step_run := 8;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 7) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 8
  IF #Step_run = 8 THEN
    IF #Num_run >= 8 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X8 := TRUE; // MOTOR 8
        #Intime_run.%X1 := FALSE;
        #Step_run := 9;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 8) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 9
  IF #Step_run = 9 THEN
    IF #Num_run >= 9 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X9 := TRUE; // MOTOR 9
        #Intime_run.%X1 := FALSE;
        #Step_run := 10;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 9) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 10
  IF #Step_run = 10 THEN
    IF #Num_run >= 10 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X10 := TRUE; // MOTOR 10
        #Intime_run.%X1 := FALSE;
        #Step_run := 11;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 10) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 11
  IF #Step_run = 11 THEN
    IF #Num_run >= 11 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X11 := TRUE; // MOTOR 11
        #Intime_run.%X1 := FALSE;
        #Step_run := 12;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 11) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 12
  IF #Step_run = 12 THEN
    IF #Num_run >= 12 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X12 := TRUE; // MOTOR 12
        #Intime_run.%X1 := FALSE;
        #Step_run := 13;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 12) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 13
  IF #Step_run = 13 THEN
    IF #Num_run >= 13 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X13 := TRUE; // MOTOR 13
        #Intime_run.%X1 := FALSE;
        #Step_run := 14;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 13) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 14
  IF #Step_run = 14 THEN
    IF #Num_run >= 14 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X14 := TRUE; // MOTOR 14
        #Intime_run.%X1 := FALSE;
        #Step_run := 15;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 14) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 15
  IF #Step_run = 15 THEN
    IF #Num_run >= 15 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X15 := TRUE; // MOTOR 15
        #Intime_run.%X1 := FALSE;
        #Step_run := 16;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 15) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 16
  IF #Step_run = 16 THEN
    IF #Num_run >= 16 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X16 := TRUE; // MOTOR 16
        #Intime_run.%X1 := FALSE;
        #Step_run := 17;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 16) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 17
  IF #Step_run = 17 THEN
    IF #Num_run >= 17 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X17 := TRUE; // MOTOR 17
        #Intime_run.%X1 := FALSE;
        #Step_run := 18;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 17) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 18
  IF #Step_run = 18 THEN
    IF #Num_run >= 18 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X18 := TRUE; // MOTOR 18
        #Intime_run.%X1 := FALSE;
        #Step_run := 19;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 18) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 19
  IF #Step_run = 19 THEN
    IF #Num_run >= 19 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X19 := TRUE; // MOTOR 19
        #Intime_run.%X1 := FALSE;
        #Step_run := 20;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 19) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 20
  IF #Step_run = 20 THEN
    IF #Num_run >= 20 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X20 := TRUE; // MOTOR 20
        #Intime_run.%X1 := FALSE;
        #Step_run := 21;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 20) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 21
  IF #Step_run = 21 THEN
    IF #Num_run >= 21 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X21 := TRUE; // MOTOR 21
        #Intime_run.%X1 := FALSE;
        #Step_run := 22;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 21) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 22
  IF #Step_run = 22 THEN
    IF #Num_run >= 22 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X22 := TRUE; // MOTOR 22
        #Intime_run.%X1 := FALSE;
        #Step_run := 23;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 22) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 23
  IF #Step_run = 23 THEN
    IF #Num_run >= 23 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X23 := TRUE; // MOTOR 23
        #Intime_run.%X1 := FALSE;
        #Step_run := 24;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 23) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 24
  IF #Step_run = 24 THEN
    IF #Num_run >= 24 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X24 := TRUE; // MOTOR 24
        #Intime_run.%X1 := FALSE;
        #Step_run := 25;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 24) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 25
  IF #Step_run = 25 THEN
    IF #Num_run >= 25 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X25 := TRUE; // MOTOR 25
        #Intime_run.%X1 := FALSE;
        #Step_run := 26;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 25) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 26
  IF #Step_run = 26 THEN
    IF #Num_run >= 26 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X26 := TRUE; // MOTOR 26
        #Intime_run.%X1 := FALSE;
        #Step_run := 27;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 26) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 27
  IF #Step_run = 27 THEN
    IF #Num_run >= 27 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X27 := TRUE; // MOTOR 27
        #Intime_run.%X1 := FALSE;
        #Step_run := 28;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 27) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 28
  IF #Step_run = 28 THEN
    IF #Num_run >= 28 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X28 := TRUE; // MOTOR 28
        #Intime_run.%X1 := FALSE;
        #Step_run := 29;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 28) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 29
  IF #Step_run = 29 THEN
    IF #Num_run >= 29 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X29 := TRUE; // MOTOR 29
        #Intime_run.%X1 := FALSE;
        #Step_run := 30;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 29) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 30
  IF #Step_run = 30 THEN
    IF #Num_run >= 30 THEN
      #Intime_run.%X1 := TRUE;
      IF #Intime_run.%X1 AND #TON_run[1].Q THEN
        #Out_run.%X30 := TRUE; // MOTOR 30
        #Intime_run.%X1 := FALSE;
        #Step_run := 100;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_run >= 30) THEN
      #Step_run := 100;
    END_IF;
  END_IF;
  // STEP 100
  IF #Step_run = 100 THEN
    #Intime_run := 0;
    #Run_busy := FALSE;
    #Out_run := 0;
    #Status := 1001;
  END_IF;

END_IF;

// Stop TON Timer Control
#"TON_stop"[0](IN := #Intime_stop.%X0, PT := #PRE_TIME);
#"TON_stop"[1](IN := #Intime_stop.%X1, PT := #Stop_time, ET => #ET_stop);
// Stop Sequence Control
IF #Estop THEN
  IF #Mode = 1 AND #Bnt_stop AND NOT #Stop_busy THEN
    #Step_run := 0;
    #Intime_run := 0;
    #Run_busy := FALSE;
    #Intime_stop := 0;
    #Stop_busy := FALSE;
    #Intime_stop.%X0 := TRUE;
  END_IF;
  IF #Intime_stop.%X0 AND #TON_stop[0].Q THEN
    IF #Step_stop = 0 THEN
      #Step_stop := 1;
    END_IF;
    #Stop_busy := TRUE;
    #Status := 2000;
    #Intime_stop.%X0 := FALSE;
  END_IF;
ELSE
  #Step_stop := 0;
  #Intime_stop := 0;
  #Stop_busy := FALSE;
  #Status := 0;
END_IF;
IF #Mode = 1 AND #Stop_busy THEN
  // STEP 1
  IF #Step_stop = 1 THEN
    IF #Num_stop >= 1 THEN
      #Out_stop.%X1 := TRUE; // MOTOR 1
      #Step_stop := 2;
      RETURN;
    END_IF;
    IF NOT (#Num_stop >= 1) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 2
  IF #Step_stop = 2 THEN
    IF #Num_stop >= 2 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X2 := TRUE; // MOTOR 2
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 3;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 2) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 3
  IF #Step_stop = 3 THEN
    IF #Num_stop >= 3 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X3 := TRUE; // MOTOR 3
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 4;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 3) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 4
  IF #Step_stop = 4 THEN
    IF #Num_stop >= 4 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X4 := TRUE; // MOTOR 4
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 5;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 4) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 5
  IF #Step_stop = 5 THEN
    IF #Num_stop >= 5 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X5 := TRUE; // MOTOR 5
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 6;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 5) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 6
  IF #Step_stop = 6 THEN
    IF #Num_stop >= 6 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X6 := TRUE; // MOTOR 6
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 7;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 6) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 7
  IF #Step_stop = 7 THEN
    IF #Num_stop >= 7 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X7 := TRUE; // MOTOR 7
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 8;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 7) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 8
  IF #Step_stop = 8 THEN
    IF #Num_stop >= 8 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X8 := TRUE; // MOTOR 8
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 9;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 8) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 9
  IF #Step_stop = 9 THEN
    IF #Num_stop >= 9 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X9 := TRUE; // MOTOR 9
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 10;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 9) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 10
  IF #Step_stop = 10 THEN
    IF #Num_stop >= 10 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X10 := TRUE; // MOTOR 10
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 11;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 10) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 11
  IF #Step_stop = 11 THEN
    IF #Num_stop >= 11 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X11 := TRUE; // MOTOR 11
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 12;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 11) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 12
  IF #Step_stop = 12 THEN
    IF #Num_stop >= 12 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X12 := TRUE; // MOTOR 12
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 13;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 12) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 13
  IF #Step_stop = 13 THEN
    IF #Num_stop >= 13 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X13 := TRUE; // MOTOR 13
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 14;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 13) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 14
  IF #Step_stop = 14 THEN
    IF #Num_stop >= 14 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X14 := TRUE; // MOTOR 14
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 15;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 14) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 15
  IF #Step_stop = 15 THEN
    IF #Num_stop >= 15 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X15 := TRUE; // MOTOR 15
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 16;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 15) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 16
  IF #Step_stop = 16 THEN
    IF #Num_stop >= 16 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X16 := TRUE; // MOTOR 16
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 17;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 16) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 17
  IF #Step_stop = 17 THEN
    IF #Num_stop >= 17 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X17 := TRUE; // MOTOR 17
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 18;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 17) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 18
  IF #Step_stop = 18 THEN
    IF #Num_stop >= 18 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X18 := TRUE; // MOTOR 18
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 19;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 18) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 19
  IF #Step_stop = 19 THEN
    IF #Num_stop >= 19 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X19 := TRUE; // MOTOR 19
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 20;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 19) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 20
  IF #Step_stop = 20 THEN
    IF #Num_stop >= 20 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X20 := TRUE; // MOTOR 20
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 21;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 20) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 21
  IF #Step_stop = 21 THEN
    IF #Num_stop >= 21 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X21 := TRUE; // MOTOR 21
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 22;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 21) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 22
  IF #Step_stop = 22 THEN
    IF #Num_stop >= 22 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X22 := TRUE; // MOTOR 22
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 23;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 22) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 23
  IF #Step_stop = 23 THEN
    IF #Num_stop >= 23 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X23 := TRUE; // MOTOR 23
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 24;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 23) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 24
  IF #Step_stop = 24 THEN
    IF #Num_stop >= 24 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X24 := TRUE; // MOTOR 24
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 25;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 24) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 25
  IF #Step_stop = 25 THEN
    IF #Num_stop >= 25 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X25 := TRUE; // MOTOR 25
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 26;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 25) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 26
  IF #Step_stop = 26 THEN
    IF #Num_stop >= 26 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X26 := TRUE; // MOTOR 26
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 27;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 26) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 27
  IF #Step_stop = 27 THEN
    IF #Num_stop >= 27 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X27 := TRUE; // MOTOR 27
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 28;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 27) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 28
  IF #Step_stop = 28 THEN
    IF #Num_stop >= 28 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X28 := TRUE; // MOTOR 28
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 29;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 28) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 29
  IF #Step_stop = 29 THEN
    IF #Num_stop >= 29 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X29 := TRUE; // MOTOR 29
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 30;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 29) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 30
  IF #Step_stop = 30 THEN
    IF #Num_stop >= 30 THEN
      #Intime_stop.%X1 := TRUE;
      IF #Intime_stop.%X1 AND #TON_stop[1].Q THEN
        #Out_stop.%X30 := TRUE; // MOTOR 30
        #Intime_stop.%X1 := FALSE;
        #Step_stop := 200;
        RETURN;
      END_IF;
    END_IF;
    IF NOT (#Num_stop >= 30) THEN
      #Step_stop := 200;
    END_IF;
  END_IF;
  // STEP 200
  IF #Step_stop = 200 THEN
    #Intime_stop := 0;
    #Stop_busy := FALSE;
    #Out_stop := 0;
    #Status := 2001;
  END_IF;

END_IF;